package fr.afcepf.atod18.utilitaires.web;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;

import org.springframework.transaction.annotation.Transactional;

import fr.afcepf.atod18.client.web.ClientMB;
import fr.afcepf.atod18.utilitaires.entity.Admin;
import fr.afcepf.atod18.utilitaires.entity.InfoSession;
import fr.afcepf.atod18.utilitaires.entity.Login;
import fr.afcepf.atod18.utilitaires.service.IServiceFacade;

@ManagedBean(name = "connexionMB")
@SessionScoped
@Transactional
public class ConnexionMB {
	   @ManagedProperty(value = "#{serviceFacade}")
	    IServiceFacade serviceFacade;
	     
	private String email;
	private String password;

	private String label;
	private Login loginClient;
    private InfoSession infoSession;
    ClientMB clientMB;
    private boolean estRestaurateur=false;
    private boolean estAdministrateur=false;
    private boolean estClient=false;
   

	public String connexion() {

		String page = "";
		List<Login> l = serviceFacade.getServiceLogin().rechercherParNom("email", email);
		if (l == null || l.size()==0 || l.size() > 1) {
			label="email incorrect";
			page="Connexion.jsf";
		} else if(! l.get(0).getEmail().equals(email)) {
			label="email incorrect";
			page="Connexion.jsf";
		}
		else {
			//infoSession = (InfoSession)FacesContext.getCurrentInstance().getAttributes().get("infoSession");
			FacesContext fc = FacesContext.getCurrentInstance();
			if(fc !=null && fc.getExternalContext()!=null){
				infoSession=(InfoSession)fc.getExternalContext().getApplicationMap().get("infoSession");
			}

			loginClient = l.get(0);
			if (loginClient.getPassword().equals(password)){
				// selon les profils du compte connecté on affiche la page de connexion
				infoSession.setLogin(loginClient.getEmail());
				infoSession.setEstConnecte(true);
				if (loginClient.getAdmin() != null){
					infoSession.setNom(loginClient.getAdmin().getNom());
					infoSession.setPrenom(loginClient.getAdmin().getPrenom());
					infoSession.setAdmin(true);
					infoSession.setIdSelRestaurant(0);
					estAdministrateur=true;
					page = "AccueilAdmin.jsf";
				}
				if (loginClient.getRestaurateur() != null){
					infoSession.setNom(loginClient.getRestaurateur().getNom());
					infoSession.setPrenom(loginClient.getRestaurateur().getPrenom());
					infoSession.setRestaurateur(true);
					infoSession.setIdSelRestaurant(loginClient.getRestaurateur().getId());
					estRestaurateur=true;
					page = "AccueilRestaurateur.jsf";
				}
				if (loginClient.getClient() != null){
					infoSession.setNom(loginClient.getClient().getNom());
					infoSession.setPrenom(loginClient.getClient().getPrenom());
					infoSession.setClient(true);
					estClient=true;
					infoSession.setIdSelRestaurant(0);
					if (infoSession.getPageCourante().equals("")){
						page = "AccueilClient.jsf";
					}
					else {
						page=infoSession.getPageCourante()+"Client.jsf";
					}
				}
			}
			else {
				label="Erreur de connexion";
				page="Connexion.jsf";
			}
		}
		return page;
	}
	
	public String deconnexion(){
		FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
		infoSession.setEstConnecte(false);
		return "AccueilVisiteur.jsf";
	}

	public IServiceFacade getServiceFacade() {
		return serviceFacade;
	}

	public void setServiceFacade(IServiceFacade serviceFacade) {
		this.serviceFacade = serviceFacade;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getLabel() {
		return label;
	}

	public void setLabel(String label) {
		this.label = label;
	}

	public Login getLoginClient() {
		return loginClient;
	}

	public void setLoginClient(Login loginClient) {
		this.loginClient = loginClient;
	}

	public InfoSession getInfoSession() {
		return infoSession;
	}

	public void setInfoSession(InfoSession infoSession) {
		this.infoSession = infoSession;
	}
	
	public ClientMB getClientMB() {
		return clientMB;
	}

	public void setClientMB(ClientMB clientMB) {
		this.clientMB = clientMB;
	}


	public boolean isEstRestaurateur() {
		return estRestaurateur;
	}

	public void setEstRestaurateur(boolean estRestaurateur) {
		this.estRestaurateur = estRestaurateur;
	}

	public boolean isEstAdministrateur() {
		return estAdministrateur;
	}

	public void setEstAdministrateur(boolean estAdministrateur) {
		this.estAdministrateur = estAdministrateur;
	}

	public boolean isEstClient() {
		return estClient;
	}

	public void setEstClient(boolean estClient) {
		this.estClient = estClient;
	}

	public String switch2Admin () {
		return "AccueilAdmin.jsf";
	}
	public String switch2Resto () {
		return "AccueilResto.jsf";
	}	
	public String switch2Client () {
		return "AccueilClient.jsf";
	}}
